home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / wink24 / src / vram.asm < prev    next >
Assembly Source File  |  1993-07-08  |  14KB  |  661 lines

  1. .386p
  2. extrn    MAX_SCR:DWORD
  3. extrn    ReWrt_flg:WORD
  4. extrn    dmy_vram:DWORD
  5. extrn    locate:NEAR
  6. ;*****************************************************************
  7. ;
  8. ;void    wrtank(ch,x,y,ccol,bcol,off)
  9. ;
  10. ;void    wrtkanji(ch,x,y,ccol,bcol,off)
  11. ;
  12. ;*****************************************************************
  13. v_para    struc
  14. v_ebp    dd    ?
  15. v_pcr    dd    ?
  16. v_ch    dd    ?
  17. v_x    dd    ?
  18. v_y    dd    ?
  19. v_ccol    dd    ?
  20. v_bcol    dd    ?
  21. v_off    dd    ?
  22. v_para    ends
  23. ;*************************************
  24. ;    VRAM Direct Access Program
  25. ;*************************************
  26. bitptn    segment    'DATA'
  27. colptn: 
  28.     dd    000000000h,099999999h,0AAAAAAAAh,0BBBBBBBBh
  29.     dd    0CCCCCCCCh,0DDDDDDDDh,0EEEEEEEEh,0FFFFFFFFh
  30.     dd    088888888h,011111111h,022222222h,033333333h
  31.     dd    044444444h,055555555h,066666666h,077777777h
  32. fntptn:    
  33.     dd    000000000h,0F0000000h,00F000000h,0FF000000h
  34.     dd    000F00000h,0F0F00000h,00FF00000h,0FFF00000h
  35.     dd    0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
  36.     dd    000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
  37.     dd    00000F000h,0F000F000h,00F00F000h,0FF00F000h
  38.     dd    000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
  39.     dd    0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
  40.     dd    000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
  41.     dd    000000F00h,0F0000F00h,00F000F00h,0FF000F00h
  42.     dd    000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
  43.     dd    0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
  44.     dd    000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
  45.     dd    00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
  46.     dd    000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
  47.     dd    0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
  48.     dd    000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
  49.     dd    0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
  50.     dd    000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
  51.     dd    0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
  52.     dd    000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
  53.     dd    00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
  54.     dd    000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
  55.     dd    0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
  56.     dd    000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
  57.     dd    000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
  58.     dd    000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
  59.     dd    0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
  60.     dd    000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
  61.     dd    00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
  62.     dd    000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
  63.     dd    0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
  64.     dd    000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
  65.     dd    00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
  66.     dd    000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
  67.     dd    0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
  68.     dd    000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
  69.     dd    00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
  70.     dd    000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
  71.     dd    0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
  72.     dd    000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
  73.     dd    000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
  74.     dd    000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
  75.     dd    0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
  76.     dd    000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
  77.     dd    00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
  78.     dd    000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
  79.     dd    0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
  80.     dd    000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
  81.     dd    0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
  82.     dd    000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
  83.     dd    0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
  84.     dd    000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
  85.     dd    00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
  86.     dd    000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
  87.     dd    0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
  88.     dd    000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
  89.     dd    000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
  90.     dd    000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
  91.     dd    0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
  92.     dd    000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
  93.     dd    00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
  94.     dd    000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
  95.     dd    0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
  96.     dd    000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
  97. bitptn    ends
  98.  
  99. VRAM    segment 'CODE'
  100.     assume  cs:VRAM
  101. ;**************************************
  102. ;    Write Kanji Code (JIS or SJIS)
  103. ;**************************************
  104.            public    wrtkan
  105. wrtkan    proc    near
  106.         push    ebp
  107.         mov        ebp,esp
  108.         push       esi
  109.         push       edi
  110.     push    ebx
  111.     push    ds
  112.     push    fs
  113.  
  114.     mov    edi,[ebp].v_y
  115.     shl    edi,13        ; 128 * 4 * 16 * v_y = 8192 * v_x
  116.     mov    eax,[ebp].v_x
  117.     shl    eax,2        ; v_x * 4
  118.     add    edi,eax
  119.     and    edi,03FFFFh
  120.     add    edi,[ebp].v_off
  121.  
  122.     mov    eax,[ebp].v_ccol
  123.     and    eax,0fh
  124.     mov    eax,ds:[eax*4+offset colptn]
  125.     mov    [ebp].v_ccol,eax
  126.     mov    eax,[ebp].v_bcol
  127.     and    eax,0fh
  128.     mov    eax,ds:[eax*4+offset colptn]
  129.     mov    [ebp].v_bcol,eax
  130.  
  131.     mov    ebx,[ebp].v_ch
  132.     bt    ebx,15
  133.     jnc    sjto4
  134.  
  135.     shl    bh,1                ; Shift Jis to Jis
  136.     cmp    bl,080h
  137.     adc    bx,1f61h
  138.     add    bl,7fh
  139.     jc    knf1
  140.     add    bl,0a2h
  141. knf1:    and    bh,7fh                ; StoJ end
  142.  
  143. sjto4:    push    es
  144.     mov    ax,0110h
  145.     mov    fs,ax
  146.     mov    ax,0100h
  147.     mov    dx,1010h
  148.     call    pword ptr fs:[00a0h]
  149.     pop    es
  150.  
  151.     mov    eax,104h
  152.     mov    fs,ax
  153.  
  154.     mov    ecx,16
  155. wrtkn1:    movzx    eax,byte ptr ds:[esi]
  156.     inc    esi
  157.     mov    eax,es:[eax*4+offset fntptn]
  158.     mov    ebx,eax
  159.     not    ebx
  160.     and    eax,[ebp].v_ccol
  161.     and    ebx,[ebp].v_bcol
  162.     or    eax,ebx
  163.     mov    fs:[edi],eax
  164.  
  165.     movzx    eax,byte ptr ds:[esi]
  166.     inc    esi
  167.     mov    eax,es:[eax*4+offset fntptn]
  168.     mov    ebx,eax
  169.     not    ebx
  170.     and    eax,[ebp].v_ccol
  171.     and    ebx,[ebp].v_bcol
  172.     or    eax,ebx
  173.     mov    fs:[edi+4],eax
  174.  
  175.     add    edi,512
  176.     and    edi,03FFFFh
  177.     add    edi,[ebp].v_off
  178.     loop    wrtkn1
  179.  
  180.     pop    fs
  181.     pop    ds
  182.     pop    ebx
  183.         pop        edi
  184.         pop        esi
  185.     pop    ebp
  186.         ret
  187. wrtkan    endp
  188. ;***********************************
  189. ;    Write ANK code
  190. ;***********************************
  191.            public    wrtank
  192. wrtank    proc    near
  193.         push    ebp
  194.         mov        ebp,esp
  195.         push       esi
  196.         push       edi
  197.     push    ebx
  198.     push    es
  199.     push    fs
  200.  
  201.     mov    edi,[ebp].v_y
  202.     shl    edi,13
  203.     mov    eax,[ebp].v_x
  204.     shl    eax,2
  205.     add    edi,eax
  206.     and    edi,03FFFFh
  207.     add    edi,[ebp].v_off
  208.  
  209.     mov    eax,[ebp].v_ccol
  210.     and    eax,0fh
  211.     mov    eax,ds:[eax*4+offset colptn]
  212.     mov    [ebp].v_ccol,eax
  213.     mov    eax,[ebp].v_bcol
  214.     and    eax,0fh
  215.     mov    eax,ds:[eax*4+offset colptn]
  216.     mov    [ebp].v_bcol,eax
  217.  
  218.     mov    ax,138h
  219.     mov    es,ax
  220.     mov    ax,104h
  221.     mov    fs,ax
  222.  
  223.     mov    esi,[ebp].v_ch
  224.     and    esi,0ffh
  225.     shl    esi,4
  226.     add    esi,3D800h
  227.  
  228.     mov    ecx,16
  229. wrtak2:    movzx    eax,byte ptr es:[esi]
  230.     inc    esi
  231.     mov    eax,ds:[eax*4+offset fntptn]
  232.     mov    ebx,eax
  233.     not    ebx
  234.     and    eax,[ebp].v_ccol
  235.     and    ebx,[ebp].v_bcol
  236.     or    eax,ebx
  237.     mov    fs:[edi],eax
  238.     add    edi,512
  239.     and    edi,03FFFFh
  240.     add    edi,[ebp].v_off
  241.     loop    wrtak2
  242.  
  243.     pop    fs
  244.     pop    es
  245.     pop    ebx
  246.         pop        edi
  247.         pop        esi
  248.     pop    ebp
  249.         ret
  250. wrtank    endp
  251. ;***********************************
  252. ;*     VRAM Scrool
  253. ;***********************************
  254.            public    vramroll
  255. vramroll proc    near
  256.     push    esi
  257.     push    edi
  258.     push    ds
  259.     push    es
  260.  
  261.     mov    eax,104h
  262.     mov    es,ax
  263.     mov    ds,ax
  264.  
  265.     mov    esi,512*16
  266.     mov    edi,0
  267.     cld
  268.     mov    ax,16*24
  269. vramlp:    mov    ecx,512/4
  270.     rep movsd
  271.     dec    ax
  272.     jnz    vramlp
  273.  
  274.     mov    ecx,512*16/4
  275.     mov    eax,0
  276.     rep stosd
  277.  
  278.     pop    es
  279.     pop    ds
  280.     pop    edi
  281.     pop    esi
  282.     ret
  283. vramroll endp
  284. ;********************************
  285. ;*    VRAM Clraer
  286. ;********************************
  287.            public    vramcls
  288. vramcls proc    near
  289.         push    ebp
  290.         mov        ebp,esp
  291.     push    edx
  292.     push    esi
  293.     push    edi
  294.     push    ds
  295.     push    es
  296.  
  297.     mov    edi,[ebp+8]
  298.     shl    edi,13
  299.     and    edi,03ffffh
  300.     add    edi,[ebp+16]
  301.  
  302.     cld
  303.     mov    eax,[ebp+12]
  304.     and    eax,0fh
  305.     mov    eax,ds:[eax*4+offset colptn]
  306.  
  307.     mov    dx,104h
  308.     mov    es,dx
  309.     mov    ds,dx
  310.  
  311.     mov    dx,16
  312. vramcl:    mov    ecx,512/4
  313.     rep stosd
  314.     and    edi,03ffffh
  315.     add    edi,[ebp+16]
  316.     dec    dx
  317.     jnz    vramcl
  318.  
  319.     pop    es
  320.     pop    ds
  321.     pop    edi
  322.     pop    esi
  323.     pop    edx
  324.     pop    ebp
  325.     ret
  326. vramcls endp
  327. ;***********************************
  328. ;    Displry CurSol
  329. ;***********************************
  330.            public    disp_cur
  331. disp_cur proc    near
  332.         push    ebp
  333.         mov        ebp,esp
  334.         push       edi
  335.     push    ds
  336.  
  337.     mov    edi,[ebp+12]
  338.     shl    edi,13
  339.     mov    eax,[ebp+8]
  340.     shl    eax,2
  341.     add    edi,eax
  342.     and    edi,03FFFFh
  343.     add    edi,[ebp+16]
  344.  
  345.     mov    eax,104h
  346.     mov    ds,ax
  347.  
  348.     mov    ecx,16
  349. disp_1:    not    dword ptr ds:[edi]
  350.     add    edi,512
  351.     and    edi,03FFFFh
  352.     add    edi,[ebp+16]
  353.     loop    disp_1
  354.  
  355.     pop    ds
  356.         pop        edi
  357.     pop    ebp
  358.         ret
  359. disp_cur endp
  360. ;***********************************
  361. ;    Displry CurSol
  362. ;***********************************
  363.            public    colset
  364. colset    proc    near
  365.         push    ebp
  366.         mov        ebp,esp
  367.         push       edi
  368.  
  369.     cld
  370.     mov    edi,[ebp+8]
  371.     mov    eax,[ebp+12]
  372.     mov    ecx,[ebp+16]
  373.     shr    ecx,1
  374.     rep stosw
  375.  
  376.         pop        edi
  377.     pop    ebp
  378.         ret
  379. colset    endp
  380. ;***********************************
  381. ;    Soft Timer
  382. ;***********************************
  383.            public    Soft_Timer
  384. Soft_Timer proc    near
  385.     mov    cx,[esp+4]
  386.         int    0FDh
  387.         ret
  388. Soft_Timer endp
  389. ;***********************************
  390. ;    Printer BIOS
  391. ;***********************************
  392.            public    PRB_chr
  393. PRB_chr proc    near
  394.     mov    ax,0100h
  395.     mov    dl,[esp+4]
  396.         int    94h
  397.     mov    al,ah
  398.     and    eax,0FFh
  399.         ret
  400. PRB_chr endp
  401.  
  402. ;**********************************************
  403. ;    漢字コ-ドチェックテ-ブル
  404. ;**********************************************
  405. ISKAN1    equ    1
  406. ISKAN2    equ    2
  407. ;        0 1 2 3 4 5 6 7 8 9 A B C D E F
  408. kantbl    db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;0
  409.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;1
  410.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;2
  411.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;3
  412.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;4
  413.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;5
  414.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;6
  415.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0    ;7
  416.     db    2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;8
  417.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;9
  418.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;A
  419.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;B
  420.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;C
  421.     db    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2    ;D
  422.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3    ;E
  423.     db    3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0    ;F
  424.  
  425. ;**************************************************
  426. ;void   wrtstr(char *str, int x, int y, int cl)
  427. ;                   +8        +12    +16    +20
  428. ;**************************************************
  429.     public  wrtstr
  430. wrtstr    proc    near
  431.     push    ebp
  432.     mov    ebp,esp
  433.     sub    esp,8
  434.     push    ebx
  435.         push    esi
  436.         push    edi
  437.  
  438.         mov    eax,[ebp+20]
  439.         test    al,16
  440.         je    BakCol
  441.         and    eax,15
  442.         mov    [ebp-8],eax        ; bc
  443.         mov    dword ptr [ebp-4],0    ; fc
  444.         jmp    WrtSt1
  445.  
  446. BakCol:    and    eax,0Fh
  447.         mov    [ebp-4],eax        ; fc
  448.         mov    dword ptr [ebp-8],0    ; bc
  449.  
  450. WrtSt1:    mov    eax,[ebp+12]        ; x
  451.     lea    edi,[eax+eax]
  452.         mov    eax,[ebp+16]        ; y
  453.         lea        eax,[eax+eax*4]
  454.         shl    eax,5
  455.         add    edi,eax
  456.         add    edi,[dmy_vram]
  457.  
  458.         mov    esi,[ebp+8]        ; *str
  459. WrtStLp:
  460.         movzx    eax,byte ptr [esi]
  461.     inc    esi
  462.         and    al,al
  463.         jnz    WrtSt2
  464.  
  465.         pop    edi
  466.         pop    esi
  467.     pop    ebx
  468.     leave
  469.     ret
  470.  
  471. WrtSt2:
  472.     mov    bl,[eax+offset kantbl]
  473.     and    bl,ISKAN1
  474.     jz    NonKan
  475.     movzx    ebx,byte ptr [esi]
  476.     mov    bh,[ebx+offset kantbl]
  477.     and    bh,ISKAN2
  478.     jz    NonKan
  479.     mov    bh,al
  480.     inc    si
  481.  
  482.         push    0
  483.         push    dword ptr [ebp-8]
  484.         push    dword ptr [ebp-4]
  485.         push    dword ptr [ebp+16]
  486.         push    dword ptr [ebp+12]
  487.     push    ebx
  488.         call    wrtkan
  489.     add    esp,6*4
  490.  
  491.     mov    al,[ebp+20]
  492.     or    al,40h
  493.     mov    ah,bh
  494.     mov    [edi],ax
  495.     add    edi,2
  496.  
  497.     mov    al,[ebp+20]
  498.     or    al,80h
  499.     mov    ah,bl
  500.     mov    [edi],ax
  501.     add    edi,2
  502.  
  503.     add    dword ptr [ebp+12],2
  504.     jmp    WrtStNt
  505.  
  506. NonKan:
  507.     cmp    al,1Bh
  508.     je    WrtStNt
  509.  
  510.     mov    ebx,eax
  511.         push    0
  512.         push    dword ptr [ebp-8]
  513.         push    dword ptr [ebp-4]
  514.         push    dword ptr [ebp+16]
  515.         push    dword ptr [ebp+12]
  516.         push    ebx
  517.         call    wrtank
  518.     add    esp,6*4
  519.  
  520.     mov    al,[ebp+20]
  521.     mov    ah,bl
  522.     mov    [edi],ax
  523.     add    edi,2
  524.         inc    dword ptr [ebp+12]
  525.  
  526. WrtStNt:
  527.     cmp    dword ptr [ebp+12],80
  528.     jl    WrtStLp
  529.         inc    dword ptr [ebp+16]
  530.         mov    dword ptr [ebp+12],0
  531.         jmp    WrtStLp
  532.  
  533. wrtstr    endp
  534.  
  535. ;******************************************
  536. ;void    Dsp_vram(char *vp)
  537. ;                       +8
  538. ;******************************************
  539.     public    Dsp_vram
  540. Dsp_vram proc    near
  541.     push    ebp
  542.     mov    ebp,esp
  543.     sub    esp,16
  544.     push    ebx
  545.     push    esi
  546.     push    edi
  547.  
  548.     mov    edi,[dmy_vram]
  549.     add    edi,320
  550.     mov    esi,[ebp+8]
  551.  
  552.     mov    dword ptr [ebp-4],0        ; y = 0
  553. DspYLop:
  554.     mov    ecx,0
  555. DspXLop:
  556.     mov    ax,[esi]        ; *vp
  557.     cmp    ax,[edi]        ; *mp
  558.     je    DspXNxt
  559.  
  560.     cmp    ecx,0
  561.     je    DspNxt1
  562.     test    al,80h
  563.     jz    DspNxt1
  564.     mov    bx,[esi-2]
  565.     test    bl,40h
  566.     jz    DspNxt1
  567.  
  568.     dec    ecx
  569.     sub    esi,2
  570.     sub    edi,2
  571.  
  572. DspNxt1:
  573.     movzx    eax,byte ptr [esi]
  574.     test    al,10h
  575.     je    DspNxt2
  576.     and    al,0Fh
  577.     mov    [ebp-16],eax
  578.     mov    dword ptr [ebp-12],0
  579.     jmp    DspNxt3
  580.  
  581. DspNxt2:
  582.     and    al,0Fh
  583.     mov    [ebp-12],eax
  584.     mov    dword ptr [ebp-16],0
  585.  
  586. DspNxt3:
  587.     mov    eax,[esi]
  588.     and    eax,00800040h
  589.     cmp    eax,00800040h
  590.     jne    DspNxt4
  591.  
  592.     push    ecx
  593.     push    0
  594.     push    dword ptr [ebp-16]
  595.     push    dword ptr [ebp-12]
  596.     mov    eax,[ebp-4]
  597.     add    eax,2
  598.     push    eax
  599.     push    ecx
  600.     movzx    eax,byte ptr [esi+3]
  601.     mov    ah,byte ptr [esi+1]
  602.     push    eax
  603.     call    wrtkan
  604.     add    esp,6*4
  605.     pop    ecx
  606.  
  607.     mov    eax,[esi]
  608.     mov    [edi],eax
  609.     jmp    DspXNxt
  610.  
  611. DspNxt4:
  612.     push    ecx
  613.     push    0
  614.     push    dword ptr [ebp-16]
  615.     push    dword ptr [ebp-12]
  616.     mov    eax,[ebp-4]
  617.     add    eax,2
  618.     push    eax
  619.     push    ecx
  620.     mov    al,[esi]
  621.     and    al,0C0h
  622.     jz    DspNxt5
  623.     mov    eax,0FEh
  624.     jmp    DspNxt6
  625. DspNxt5:
  626.     movzx    eax,byte ptr [esi+1]
  627. DspNxt6:
  628.     push    eax
  629.     call    wrtank
  630.     add    esp,6*4
  631.     pop    ecx
  632.  
  633.     mov    ax,[esi]
  634.     mov    [edi],ax
  635.  
  636. DspXNxt:
  637.     add    esi,2
  638.     add    edi,2
  639.     inc    ecx
  640.     cmp    ecx,80
  641.     jne    DspXLop
  642.  
  643.     inc    dword ptr [ebp-4]
  644.     mov    eax,[ebp-4]
  645.     cmp    eax,MAX_SCR
  646.     jne    DspYLop
  647.  
  648.     mov    word ptr ReWrt_flg,-1
  649.     call   locate
  650.  
  651.     pop    edi
  652.     pop    esi
  653.     pop    ebx
  654.     leave
  655.     ret
  656.  
  657. Dsp_vram endp
  658.  
  659. VRAM    ends
  660.     end
  661.